package edu.ctbu.ljy.bot.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import edu.ctbu.ljy.bot.constain.ConversationConfig;
import edu.ctbu.ljy.bot.constain.RoleContent;
import okhttp3.WebSocket;

import java.util.UUID;

public class ConversationThread extends Thread {
    private WebSocket webSocket;
    private ConversationConfig res;

    public ConversationThread(WebSocket webSocket, ConversationConfig res) {
        this.webSocket = webSocket;
        this.res = res;
    }

    public void run() {
        try {
            JSONObject requestJson=new JSONObject();

            JSONObject header=new JSONObject();  // header参数
            header.put("app_id",res.appid);
            header.put("uid", UUID.randomUUID().toString().substring(0, 10));

            JSONObject parameter=new JSONObject(); // parameter参数
            JSONObject chat=new JSONObject();
            chat.put("domain","generalv3");
            chat.put("temperature",0.5);
            chat.put("max_tokens",4096);
            parameter.put("chat",chat);

            JSONObject payload=new JSONObject(); // payload参数
            JSONObject message=new JSONObject();
            JSONArray text=new JSONArray();

            //背景设定
            for(RoleContent roleContent : res.roleContentBackground){
                text.add(JSON.toJSON(roleContent));
            }

            // 历史问题获取
            if(res.historyList.size()>0){
                for(RoleContent roleContent : res.historyList){
                    text.add(JSON.toJSON(roleContent));
                }
            }

            // 最新问题
            RoleContent roleContent=new RoleContent();
            roleContent.setRole("user");
            roleContent.setContent(res.NewQuestion);
            text.add(JSON.toJSON(roleContent));
            res.historyList.add(roleContent);//将新问题加入历史问题集合


            message.put("text",text);
            payload.put("message",message);

            requestJson.put("header",header);
            requestJson.put("parameter",parameter);
            requestJson.put("payload",payload);
            System.err.println(requestJson); // 可以打印看每次的传参明细
            webSocket.send(requestJson.toString());                                       //关键！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！
            // 等待服务端返回完毕后关闭
            while (true) {
                // System.err.println(wsCloseFlag + "---");
                Thread.sleep(200);
                if (res.wsCloseFlag) {
                    break;
                }
            }
            webSocket.close(1000, "");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
